home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2004 April / Gamestar_61_2004-04_dvdb.iso / DVDStar / Editace / hltp.exe / {app} / Applications / QuArK / plugins / maphalflifeinfodecal.py < prev    next >
Text File  |  2004-01-05  |  7KB  |  193 lines

  1. """   QuArK  -  Quake Army Knife
  2. """
  3.  
  4. #$Header: /cvsroot/quark/runtime/plugins/maphalflifeinfodecal.py,v 1.3 2003/12/18 21:51:46 peter-b Exp $
  5.  
  6. Info = {
  7.    "plug-in":       "Half-Life infodecal helper",
  8.    "desc":          "A macro to help making strings of HL-infodecals.",
  9.    "date":          "29 jan 98",
  10.    "author":        "Decker",
  11.    "author e-mail": "decker@post1.tele.dk",
  12.    "quark":         "Version 5.4" }
  13.  
  14.  
  15. from quarkpy.maputils import *
  16. from quarkpy.maphandles import *
  17. import quarkpy.mapduplicator
  18. import plugins.deckerutils
  19. StandardDuplicator = quarkpy.mapduplicator.StandardDuplicator
  20. DuplicatorManager = quarkpy.mapduplicator.DuplicatorManager
  21. # DupOffsetHandle = quarkpy.mapduplicator.DupOffsetHandle
  22.  
  23. class HalfLifeInfodecalHelper(StandardDuplicator):
  24.  
  25.     def readvalues(self):
  26.     StandardDuplicator.readvalues(self)
  27.     s = self.dup["text"]        # The string to convert to infodecals
  28.     if s:
  29.        self.text = s
  30.     else:
  31.        self.text = None
  32.     s = self.dup["wildchar"]
  33.     if s:
  34.        self.wildchar = s
  35.     else:
  36.        self.wildchar = '@'
  37.     s = self.dup["tex_upper"]    # Texture-templatename of Upper characters
  38.     if s:
  39.        self.tex_upper = s
  40.     else:
  41.        self.tex_upper = None
  42.     s = self.dup["char_upper"]    #
  43.     if s:
  44.        self.char_upper = s
  45.     else:
  46.        self.char_upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  47.     s = self.dup["tex_lower"]    # Texture-templatename of Lower characters
  48.     if s:
  49.        self.tex_lower = s
  50.     else:
  51.        self.tex_lower = None
  52.     s = self.dup["char_lower"]    #
  53.     if s:
  54.        self.char_lower = s
  55.     else:
  56.        self.char_lower = "abcdefghijklmnopqrstuvwxyz"
  57.     s = self.dup["tex_numeric"]        # Texture-templatename of Numeric characters
  58.     if s:
  59.        self.tex_numeric = s
  60.     else:
  61.        self.tex_numeric = None
  62.     s = self.dup["char_numeric"]        # Texture-templatename of Numeric characters
  63.     if s:
  64.        self.char_numeric = s
  65.     else:
  66.        self.char_numeric = "+-,.0123456789"
  67.  
  68.     def do(self, item, character=None, translate=None):
  69.     if not character:
  70.        return item
  71.     if translate:
  72.        StandardDuplicator.do(self, item)    # Do standard offset/matrix calculations
  73.     if character in self.char_numeric:    # Is it a numeric char?
  74.        if self.tex_numeric:            # Is numeric texture-template specified?
  75.           pos = self.tex_numeric.find(self.wildchar) # Try to find wildchar in texture-templatename
  76.           if pos > -1:
  77.              item["texture"] = self.tex_numeric[:pos] + character + self.tex_numeric[pos + 1:]
  78.           else:
  79.              item["texture"] = self.tex_numeric + character    # Just append the character, and hope thats going to work
  80.     elif character in self.char_upper:
  81.        if self.tex_upper:            # Is upper texture-template specified?
  82.           pos = self.tex_upper.find(self.wildchar) # Try to find wildchar in texture-templatename
  83.           if pos > -1:
  84.              item["texture"] = self.tex_upper[:pos] + character + self.tex_upper[pos + 1:]
  85.           else:
  86.              item["texture"] = self.tex_upper + character    # Just append the character, and hope thats going to work
  87.     elif character in self.char_lower:
  88.        if self.tex_lower:            # Is lower texture-template specified?
  89.           pos = self.tex_lower.find(self.wildchar) # Try to find wildchar in texture-templatename
  90.           if pos > -1:
  91.              item["texture"] = self.tex_lower[:pos] + character + self.tex_lower[pos + 1:]
  92.           else:
  93.              item["texture"] = self.tex_lower + character    # Just append the character, and hope thats going to work
  94.     return item
  95.  
  96.     def buildimages(self, singleimage=None):
  97.         try:
  98.             self.readvalues()
  99.         except:
  100.             print "Note: Invalid HL-InfoDecal Specific/Args."
  101.             return
  102.     if not self.text:
  103.        return
  104.     thissingleimage = singleimage
  105.         newobjs = []
  106.         for i in range(len(self.text)):
  107.        if i == 0:
  108.           item = quarkx.newobj("infodecal:e")
  109.           item["origin"] = self.dup["origin"]
  110.           item.translate(quarkx.vect("0 0 0"))    # Force the item to show up, when doing an "Dissociate items"
  111.           item = self.do(item, self.text[i])
  112.        else:
  113.           if self.text[i - 1] <= ' ' or self.text[i - 1] > '~': # If previous item was illegal char, don't make a new item, but reuse it.
  114.          item = self.do(item, self.text[i], 1)
  115.           else:
  116.              item = self.do(item.copy(), self.text[i], 1)
  117.        if ((thissingleimage is None) or (0==thissingleimage)) and (self.text[i] > ' ' and self.text[i] <= '~'):
  118.           newobjs = newobjs + [item]
  119.         return newobjs
  120.  
  121.  
  122.     def handles(self, editor, view):
  123. #        h = DuplicatorManager.handles(self, editor, view)
  124.         h = quarkpy.maphandles.CenterEntityHandle(self.dup, view, quarkpy.maphandles.IconHandle)
  125.         try:
  126.             self.readvalues()
  127.             if not self.offset:
  128.                 return h
  129.         except:
  130.             return h
  131.         try:
  132.         self.text = self.dup["text"]
  133.         count = int(len(self.text))
  134.         except:
  135.             count = 0
  136.         for i in range(1, count):
  137.        if (self.text[i] > ' ' and self.text[i] <= '~'): # Skip illegal characters
  138. #              h.append(DupOffsetHandle(self.origin + self.offset*i, self.dup, self.offset, i))
  139.               h.append(HalfLifeInfoDecalDupOffsetHandle(self.origin + self.offset*i, self.dup, self.offset, i))
  140.         return h
  141.  
  142.  
  143. class HalfLifeInfoDecalDupOffsetHandle(quarkpy.mapduplicator.DupOffsetHandle):
  144.  
  145.     def drag(self, v1, v2, flags, view):
  146.         import quarkpy.qhandles
  147.         delta = v2-v1
  148.         if flags&MB_CTRL:
  149.             delta = quarkpy.qhandles.aligntogrid(self.pos + delta, 1) - self.pos
  150.         else:
  151.             delta = quarkpy.qhandles.aligntogrid(delta, 0)
  152.         if delta or (flags&MB_REDIMAGE):
  153.             new = self.centerof.copy()
  154.             new["offset"] = str(self.dupoffset + delta/self.divisor)
  155.             new = [new]
  156.         else:
  157.             new = None
  158.         return [self.centerof], new
  159.  
  160.  
  161. def HalfLifeInfoDecalRegister():
  162.     # Register HalfLifeInfoDecalHelper in Duplicators & misc folder
  163.     newdup = quarkx.newobj("Half-Life Infodecal Helper:d")
  164.     newdup["text"] = "HALFLIFE"
  165.     newdup["wildchar"] = "@"
  166.     newdup["tex_upper"] = "{CAPS@"
  167.     newdup["tex_lower"] = " "
  168.     newdup["tex_numeric"] = "{MED#S@"
  169.     newdup["origin"] = "0 0 0"
  170.     newdup["offset"] = "12 0 0"
  171.     newdup["macro"] = "dup hlinfodecal"
  172.     plugins.deckerutils.RegisterInToolbox("New map items...", "Duplicators & misc", newdup)
  173.  
  174. ### HalfLifeInfoDecalRegister()
  175.  
  176. quarkpy.mapduplicator.DupCodes.update({
  177.   "dup hlinfodecal":         HalfLifeInfodecalHelper,
  178. })
  179.  
  180.  
  181. # ----------- REVISION HISTORY ------------
  182. # $Log: maphalflifeinfodecal.py,v $
  183. # Revision 1.3  2003/12/18 21:51:46  peter-b
  184. # Removed reliance on external string library from Python scripts (second try ;-)
  185. #
  186. # Revision 1.2  2001/02/18 20:21:56  decker_dk
  187. # Do not register itself in 'New map items...'
  188. #
  189. #History:
  190. #1999-11-14  Added self-registering
  191. #1999-01-29  Made so only one group gets created, when "Dissociate items"
  192. #1999-01-23  Removed redimage when moving center/duphandles of the HalfLifeInfodecalHelper duplicator.
  193.